package app.web.admin.domain.ao;

import app.web.admin.mapper.AdminMenuMapper;
import com.gitee.feizns.dynamic.bean.Convertible;
import com.gitee.feizns.quickstart.validation.Verifiable;
import com.gitee.feizns.quickstart.validation.constraints.DynamicValidate;
import com.gitee.feizns.quickstart.web.ex.ServiceException;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 菜单创建参数
 * @author feizns
 * @since 2025-04-09
 */
@Data
@DynamicValidate
@NoArgsConstructor
public class MenuCreateAo implements Convertible, Verifiable {

    /**
     * 菜单名称
     */
    @NotBlank(message = "菜单名称不能为空.")
    private String name;

    /**
     * 菜单标识符（使用:分隔模块，所有模块使用*，如用户模块下所有菜单：'user:*', 'user:*' 包含 'user:create' 和 'user:update' ）
     */
    @NotBlank(message = "菜单标识符不能为空.")
    private String identifier;

    /**
     * 菜单排序字段
     */
    @NotNull(message = "菜单排序字段不能为空.")
    private Integer sort = 0;

    /**
     * 额外信息
     */
    @NotNull(message = "额外信息不能为空.")
    private Map<String, Object> extra = new LinkedHashMap<>();

    @Override
    public boolean validate() {
        if ( AdminMenuMapper.existsIdentifier(this.identifier) )
            throw new ServiceException("菜单标识符已存在.");
        return Verifiable.super.validate();
    }

}
